#实验1，弄清numpy的线性代数函数eig
import numpy as np 
#使用已知结果的案例，进行输入，看这个函数与实际数学中运行的差距。
A = np.mat('[13,-4,2;-4,13,-2;2,-2,10]')
s, d = np.linalg.eig(A)
#得出s是一个只有一行的数组，数组里面的值正是这个矩阵的特征值。
#关键来了，对d的解读，d是一个多维数组
#是经过斯密特正交化的矩阵吗？
#发现：d这个数组应该竖着看，此时会发现d的不同列向量之间的内积为0，相同则为1。
#这是唯一合乎逻辑的解读方式。
#结论：看来numpy的linalg模块内置的求特征值和特征向量：会求出一个特征值组和一个正交矩阵。
d*(d.T)#验证d是否是正交矩阵，另外(d.T)*d也可以。
##下面是eigh()的实验结果
s, d = np.linalg.eigh(A)
#返回结果会排序，特征值默认从大到小排序。
#特征向量返回的是martix而不是array，依然按列观测。
(d.T)*d#可看出d是正交矩阵。
##下面测试eigvals()、eigvalsh()
np.linalg.eigvals(A)#只返回了特征值
np.linalg.eigvalsh(A)#按升序返回了特征值
##下面去找降序的参数设置
##参数详解，第一个也是必须的矩阵、第二个UPLO‘L’or‘U’设置升序降序默认‘L’升序
np.linalg.eigh(A, UPLO='U')#看来第二个参数不是我们所想的。
"""
测试numpy矩阵运算，用（m，n）矩阵减（1，n）矩阵
"""
"""
numpy的linalg模块的norm函数，是什么意思？
"""
np.linalg.norm(A, 1)